﻿/*
SmsBox .NET
Copyright (c) 2011 Jakub "Cubix651" Cisło - http://cubix.one.pl

License: X11 (MIT) See README file.
*/
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Net;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;

namespace SmsBox.NET
{
    public partial class Form1 : Form
    {
        enum Status { Null, Start, Sending };
        Status status = Status.Start;
        WebBrowser wbSms;
        Kontakty kontakty = null;
        int iloscPozostalychZnakow = 0;
        string sciezkaGlowna, sciezkaKontaktow;

        public Form1()
        {
            InitializeComponent();

            wbSms = new WebBrowser();
            wbSms.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wbbSms_DocumentCompleted);
            wbSms.Navigate("http://sms.priv.pl/");

            kontakty = new Kontakty();
            kontakty.mainForm = this;
        }

        private void btnWyslij_Click(object sender, EventArgs e)
        {
            if ((int.Parse(tbxLimit.Text) != 0) && (int.Parse(tbxZnaki.Text) >= 0) && (iloscPozostalychZnakow != 0) && (tbxNrTel.Text.Length == tbxNrTel.MaxLength) && (rtbTresc.Text.Length != 0))
            {
                /*Form okienko = new Form();
                okienko.Show();
                okienko.Controls.Add(wbSms);
                wbSms.Dock = DockStyle.Fill;*/

                //uzupełnienie pól i wysłanie SMSa
                HtmlDocument doc = wbSms.Document;
                doc.GetElementById("siec").Children[cmbNrTel.SelectedIndex + 1].SetAttribute("selected", "selected");
                doc.GetElementById("number2").SetAttribute("value", tbxNrTel.Text);
                doc.GetElementById("tresc").SetAttribute("value", rtbTresc.Text);
                doc.GetElementById("od").SetAttribute("value", tbxOd.Text);
                //doc.GetElementsByTagName("input")[20].InvokeMember("Click");
                //doc.InvokeScript("nom");
                for (int i = doc.GetElementsByTagName("input").Count - 1; i >= 0; i++)
                {
                    if (doc.GetElementsByTagName("input")[i].GetAttribute("value") == "Wyślij SMS !")
                    {
                        doc.GetElementsByTagName("input")[i].InvokeMember("Click");
                        break;
                    }
                }

                //zmiana wyglądu programu
                prbLadowanie.Value = 0;
                tmrLadowanie.Enabled = true;
                lblLadowanie.Text = "Wysyłanie wiadomości...";
                btnWyslij.Enabled = false;
                status = Status.Sending;
            }
            else if (int.Parse(tbxLimit.Text) == 0)
                MessageBox.Show("Nie masz już limitu SMSów. Nowe SMSy możesz wysłać jutro.");
            else if (iloscPozostalychZnakow == 0)
                MessageBox.Show("Nie wybrano 3 początkowych cyfr numeru telefonu. Wybierz początek numeru z listy i spróbuj ponownie.");
            else if (tbxNrTel.Text.Length != tbxNrTel.MaxLength)
                MessageBox.Show("Nie podano 6 końcowych cyfr numeru. Uzepłnij pole i spróbuj ponownie.");
            else if (rtbTresc.Text.Length == 0)
                MessageBox.Show("Nie wpisano treści wiadomości. Uzupełnij pole i spróbuj ponownie.");
            else if (int.Parse(tbxZnaki.Text) < 0)
                MessageBox.Show("Treść SMSa przekracza dozwolony limit długości. Popraw wiadomość i spróbuj jeszcze raz.");
        }

        private void wbbSms_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
        {
            tmrLadowanie.Enabled = false;
            prbLadowanie.Value = prbLadowanie.Maximum;
            btnWyslij.Enabled = true;

            if (status == Status.Start)
            {
                lblLadowanie.Text = "Bramka załadowana";
            }
            else if (status == Status.Sending)
            {
                int i = wbSms.Document.Body.InnerHtml.IndexOf("<FONT size=+2>") + "<FONT size=+2>".Length;
                lblLadowanie.Text = wbSms.Document.Body.InnerHtml.Substring(i, wbSms.Document.Body.InnerHtml.IndexOf("<", i) - i);
                tbxLimit.Text = wbSms.Document.Body.InnerHtml.Substring(wbSms.Document.Body.InnerHtml.IndexOf("Zostało ci ") + "Zostało ci ".Length, 2);
                label5.Visible = tbxLimit.Visible = true;
            }
            status = Status.Null;
            this.Focus();
        }

        private void tmrLadowanie_Tick(object sender, EventArgs e)
        {
            prbLadowanie.Value += 1;
            if (prbLadowanie.Value == prbLadowanie.Maximum)
                prbLadowanie.Value = 0;
        }

        private void rtbTresc_TextChanged(object sender, EventArgs e)
        {
            tbxZnaki.Text= iloscPozostalychZnakow - (rtbTresc.Text.Length + tbxOd.Text.Length) + "";
        }

        private void cmbNrTel_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch((cmbNrTel.SelectedIndex+2))
            {
                case 3:
                    iloscPozostalychZnakow = 46;
                    break;
                case 2:
                case 4:
                case 5:
                    iloscPozostalychZnakow = 86;
                    break;
                case 71:
                case 72:
                case 73:
                case 74:
                case 75:
                case 77:
                    iloscPozostalychZnakow = 85;
                    break;
                case 84:
                case 86:
                    iloscPozostalychZnakow = 521;
                    break;
                case 6:
                case 7:
                case 8:
                case 9:
                case 10:
                case 11:
                case 12:
                case 13:
                case 14:
                case 15:
                case 16:
                case 17:
                case 18:
                case 19:
                case 20:
                case 21:
                case 22:
                case 23:
                case 24:
                case 25:
                case 67:
                case 70:
                case 76:
                case 78:
                case 79:
                case 80:
                    iloscPozostalychZnakow = 560;
                    break;
                case 54:
                case 55:
                case 56:
                case 57:
                case 58:
                case 59:
                case 60:
                case 62:
                case 63:
                case 64:
                case 66:
                case 27:
                case 29:
                case 31:
                case 33:
                case 35:
                case 37:
                case 39:
                case 41:
                case 43:
                case 45:
                case 46:
                case 48:
                case 50:
                case 52:
                    iloscPozostalychZnakow = 532;
                    break;
                case 26:
                case 28:
                case 30:
                case 32:
                case 34:
                case 36:
                case 38:
                case 40:
                case 42:
                case 44:
                case 47:
                case 49:
                case 51:
                case 53:
                case 61:
                case 65:
                case 68:
                case 69:
                case 81:
                case 82:
                case 83:
                case 85:
                case 87:
                case 88:
                    iloscPozostalychZnakow = 34;
                    break;
            }
            tbxZnaki.Text = iloscPozostalychZnakow + "";
        }

        private void btnOProgramie_Click(object sender, EventArgs e)
        {
            About oprogramie = new About();
            oprogramie.Show();
        }

        private void btnNowySms_Click(object sender, EventArgs e)
        {
            rtbTresc.Text = "";
            tbxNrTel.Text = "";
            cmbNrTel.SelectedIndex = -1;
        }

        private void btnSpisTelefonow_Click(object sender, EventArgs e)
        {
            kontakty.Show();
        }

        private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            FileStream fsWrite = File.Open(sciezkaKontaktow, FileMode.Create, FileAccess.ReadWrite);
            BinaryFormatter bf = new BinaryFormatter();
            
            bf.Serialize( fsWrite, kontakty.lsvKontakty.Items.Count );
            for( int iCnt = 0; iCnt < kontakty.lsvKontakty.Items.Count; iCnt++ )
            {
                ListViewItem lvi = kontakty.lsvKontakty.Items[iCnt];
                bf.Serialize( fsWrite, lvi );
            }
            fsWrite.Close();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            sciezkaGlowna = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\SmsBox .NET";
            sciezkaKontaktow = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\SmsBox .NET\\Kontakty.xml";
            if (File.Exists(sciezkaKontaktow))
            {
                FileStream fsRead = File.Open(sciezkaKontaktow, FileMode.Open, FileAccess.ReadWrite);
                BinaryFormatter bf = new BinaryFormatter();
                
                int lviCount = (int)bf.Deserialize( fsRead );
                for( int kCnt = 0; kCnt < lviCount; kCnt++ )
                {
                    object obj = bf.Deserialize( fsRead );
                    ListViewItem lvi = (ListViewItem)obj;
                    kontakty.lsvKontakty.Items.Add( lvi );
                }
            }
            else
                Directory.CreateDirectory(sciezkaGlowna);
        }
    }
}
